using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Airports._Analysis
{
    /// <summary>
    /// <para>Generate OIS Profile Data</para>
    /// <para>Generates a JSON string that is stored in the PROFILEJSON field on the input Obstruction Identification Surface multipatch feature class that contains the data necessary to depict the terrain, runway, and OIS in the Terrain and Obstacle Profile layout element.</para>
    /// <para>生成一个 JSON 字符串，该字符串存储在输入 Obstruction Identification Surface multipatch 要素类的 PROFILEJSON 字段中，该要素类包含在 Terrain and Obstacle Profile 布局元素中描绘地形、跑道和 OIS 所需的数据。</para>
    /// </summary>    
    [DisplayName("Generate OIS Profile Data")]
    public class GenerateOISProfileData : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateOISProfileData()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_runway_features">
        /// <para>Input Runway Features</para>
        /// <para>This is the input runway dataset. The feature class must be z-enabled and contain polylines.</para>
        /// <para>这是输入跑道数据集。要素类必须启用 z 并包含折线。</para>
        /// </param>
        /// <param name="_in_dems">
        /// <para>Input Elevation Model</para>
        /// <para>The DEMs covering the runways and their approach obstruction identification surfaces.</para>
        /// <para>覆盖跑道及其进近障碍物识别表面的 DEM。</para>
        /// </param>
        /// <param name="_target_ois_features">
        /// <para>Target OIS Features</para>
        /// <para>The multipatch features with defined Airport schema. The feature class must be z-enabled.</para>
        /// <para>具有定义的 Airport 模式的多面体功能。要素类必须启用 z 功能。</para>
        /// </param>
        public GenerateOISProfileData(object _in_runway_features, List<object> _in_dems, object _target_ois_features)
        {
            this._in_runway_features = _in_runway_features;
            this._in_dems = _in_dems;
            this._target_ois_features = _target_ois_features;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "Generate OIS Profile Data";

        public override string CallName => "aviation.GenerateOISProfileData";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_runway_features, _in_dems, _target_ois_features, _in_flightpath_features, _sampling_distance, _sample_profile_ois.GetGPValue(), _sample_profile_runways.GetGPValue(), _out_ois_features];

        /// <summary>
        /// <para>Input Runway Features</para>
        /// <para>This is the input runway dataset. The feature class must be z-enabled and contain polylines.</para>
        /// <para>这是输入跑道数据集。要素类必须启用 z 并包含折线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Runway Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_runway_features { get; set; }


        /// <summary>
        /// <para>Input Elevation Model</para>
        /// <para>The DEMs covering the runways and their approach obstruction identification surfaces.</para>
        /// <para>覆盖跑道及其进近障碍物识别表面的 DEM。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Elevation Model")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_dems { get; set; }


        /// <summary>
        /// <para>Target OIS Features</para>
        /// <para>The multipatch features with defined Airport schema. The feature class must be z-enabled.</para>
        /// <para>具有定义的 Airport 模式的多面体功能。要素类必须启用 z 功能。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_ois_features { get; set; }


        /// <summary>
        /// <para>Input Flight Path Features</para>
        /// <para>The polyline features that define curved approaches to the specified runways. If unspecified, all input features will be processed as straight approaches.</para>
        /// <para>定义指定跑道的曲线进近的折线要素。如果未指定，则所有输入要素将作为直线方法进行处理。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Flight Path Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_flightpath_features { get; set; } = null;


        /// <summary>
        /// <para>Sampling Distance</para>
        /// <para>The distance, in meters, between generated points. The default is 30.</para>
        /// <para>生成点之间的距离（以米为单位）。默认值为 30。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sampling Distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _sampling_distance { get; set; } = 30;


        /// <summary>
        /// <para>Sample OIS Features</para>
        /// <para><xdoc>
        ///   <para>Specifies whether elevation points for OIS features will be generated.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Uses only the start and end points of the runways. Elevation points will not be generated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Generates elevation points.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否生成 OIS 要素的高程点。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 仅使用跑道的起点和终点。不会生成高程点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 （Checked） - 生成高程点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sample OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _sample_profile_ois_value _sample_profile_ois { get; set; } = _sample_profile_ois_value._false;

        public enum _sample_profile_ois_value
        {
            /// <summary>
            /// <para>PROFILE_OIS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PROFILE_OIS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_PROFILE_OIS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_PROFILE_OIS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Sample Runway Features</para>
        /// <para><xdoc>
        ///   <para>Specifies whether elevation points along the runways will be generated.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Uses only the start and end points of the runways. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Generates elevation points along the runways.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否沿跑道生成高程点。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 仅使用跑道的起点和终点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 沿跑道生成高程点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sample Runway Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _sample_profile_runways_value _sample_profile_runways { get; set; } = _sample_profile_runways_value._false;

        public enum _sample_profile_runways_value
        {
            /// <summary>
            /// <para>PROFILE_RUNWAY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PROFILE_RUNWAY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_PROFILE_RUNWAY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_PROFILE_RUNWAY")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output OIS Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_ois_features { get; set; }


        public GenerateOISProfileData SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}